package com.dream.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author 匠人码农
 * @date 2020/11/05 13:39
 * 概要：
 *     该类用于测试HttpServletResponse
 *     1.输出流只能使用一个，不能同时使用字节流和字符流。
 *     2.如何回传结果给客户端？
 *
 *     3.如何解决中文乱码问题
 *       3.1 设置服务器字符集UTF-8，设置浏览器的字符集UTF-8
 *
 *       3.2
 */

public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
          如果下面的输出流同时使用则会发生下面错误信息
          1.getOutputStream在前调用，getWriter在后调用。
          getOutputStream() has already been called for this response
          2.getOutputStream在后调用，getWriter在前调用。
          getWriter() has already been called for this response
         */
        //1.输出流只能使用一个，不能同时使用字节流和字符流。
//        resp.getWriter(); //输出字符流
//        resp.getOutputStream(); //输出字节流
        /*
          解决乱码的问题
         */
        //乱码解决方式1
        //设置服务器字符集
//        resp.setCharacterEncoding("UTF-8");
//        //通过响应头设置浏览器的字符集
//        resp.setHeader("Content-Type","text/html;charset=UTF-8");

        //乱码解决方式2（推荐的方案）
        //注意：下面代码及设置了服务器的字符集也设置了浏览器的字符集
        resp.setContentType("text/html;charset=UTF-8");

        //查看当前的字符集
        System.out.println("resp默认的字符集：" + resp.getCharacterEncoding());

        //2.回传结果客户端
        PrintWriter printWriter = resp.getWriter();
        printWriter.println("this is OK!");
        printWriter.println("测试中文乱码：我爱你中国！");

    }

}
